package com.hyper_yang._05_juc.chap05;

import java.util.Random;
import java.util.concurrent.Semaphore;

/**
 * 信号量：
 *  例子：6辆车（线程）要进入到停车场共计有3个车位（信号量）
 */
public class SemaphoreDemo {
    public static void main(String[] args) {
        Semaphore semaphore = new Semaphore(3); //信号量值3，表示3个停车位

        //6个线程，就相当于6辆车
        for (int i = 1; i <= 6; i++) {
            new Thread(()->{
                try {
                    semaphore.acquire(); //申请车位,死等   申请成功信号量-1    减到0没有停车位了

                    System.out.println(Thread.currentThread().getName() + "\t" + " 抢到了车位,办理业务");
                    //semaphore.tryAcquire() //申请车位，申请不到不再申请，直接走人。
                    Thread.sleep(new Random().nextInt(10)); //模拟占用车位的时间，正在办理事务.

                    System.out.println(Thread.currentThread().getName() + "\t" + " 车走了");
                    semaphore.release(); //车走了，释放停车位  信号量+1     值为3，没人使用停车位。

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            },"车辆编号-"+i).start();
        }
    }
}
